home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
games
/
spassion
/
source.lzh
/
SOURCE
/
FuncEnemy
/
VOLCANO.C
< prev
next >
Wrap
Text File
|
2000-03-26
|
4KB
|
164 lines
/*
#include <stdio.h>
#include <iocslib.h>
void key_wait( void );
#define BIT(i) (1<<(i))
*/
/*
火山
*/
#include <xsp2lib.h>
#include "../SPASSION.H"
#include "../player.h"
#include "../enemy.h"
#include "../eshot.h"
#include "../BG.H"
#include "../effect.h"
#include "../priority.h"
#include "../sound.h"
#include "../entry.h"
#ifndef NULL
#define NULL ((void *) 0)
#endif
static short MoveEnemyVolcano( ENEMY *ene );
/*static void TiniEnemyVolcano(ENEMY *);*/
static short MoveEnemyRock(ENEMY *);
/*static void TiniEnemyRock(ENEMY *);*/
#define PT_ST 0xD
#define PT_END 0xF
static HIT_XY4 hit_p[]={-3-PLAYER_HIT_X,-3-PLAYER_HIT_Y,3+PLAYER_HIT_X,3+PLAYER_HIT_Y};
static HIT_XY4 hit_o[]={-3-OPTION_HIT_X,-3-OPTION_HIT_Y,3+OPTION_HIT_X,3+OPTION_HIT_Y};
static HIT_XY4 hit_s[]={-3,-3,3,3};
extern HIT_XY4 nohit;
static unsigned char seed=0;
void InitEnemyVolcanoHit( void )
{
}
void InitEnemyRockHit( void )
{
}
void InitEnemyVolcano(ENEMY *ene)
{
ene->vx = -map_vx;
ene->vy = 0;
ene->hit_p[0] = NULL;
ene->hit_o[0] = NULL;
ene->hit_s[0] = NULL;
ene->no_dead = 0;
ene->func_enemy_move = MoveEnemyVolcano;
/* ene->func_enemy_tini = TiniEnemyVolcano;*/
/* entry_counter_stop = !0;*/ /* エントリーカウンター停止 */
}
void InitEnemyRock(ENEMY *ene)
{
short pal[4]= {0x300,0x700,0x800,0x800};
short info[4]={0x0,0x4000,0x8000,0xC000},p,i;
ene->vx = (rndtable[seed++] & 0x7) * (65536 / 4);
seed&=255;
if( rndtable[seed++]>127 )
ene->vx *= -1;
seed&=255;
ene->vx -= map_vx;
ene->vy = -(rndtable[seed++] & 0x7) * 32768;
seed&=255;
if( !ene->vy )
ene->vy = -65536/4;
p=pal[rndtable[seed++]&3];seed&=255;
i=info[rndtable[seed++]&3];seed&=255;
ene->info = p | PRIORITY_ZAKO | i;
ene->hit_p[0] = &hit_p[0];ene->hit_p[1]=NULL;
ene->hit_o[0] = &hit_o[0];ene->hit_o[1]=NULL;
ene->hit_s[0] = &hit_s[0];ene->hit_s[1]=NULL;
ene->hp = 1;
ene->no_dead = 0;
ene->func_enemy_move = MoveEnemyRock;
/* ene->func_enemy_tini = TiniEnemyRock;*/
/* entry_counter_stop = !0;*/ /* エントリーカウンター停止 */
}
static short MoveEnemyVolcano( ENEMY *ene )
{
/* 速度を足して上位ワード(固定整数部)だけ取り出す */
ene->x = ((ene->lx += ene->vx) >> 16);
ene->y = ((ene->ly += ene->vy) >> 16);
if( rndtable[seed++]>164)
MakeEnemy(ENEMY_ROCK , ene->x , ene->y, 0, ene);
seed&=255;
/* 画面外に出たら消去 */
if( ene->x < 16 - 32 )
return (0);
return(1);
}
static short MoveEnemyRock( ENEMY *ene )
{
/* 速度を足して上位ワード(固定整数部)だけ取り出す */
ene->x = ((ene->lx += ene->vx) >> 16)-8; /*-8は表示位置をずらすため*/
ene->y = ((ene->ly += ene->vy) >> 16)-8;
ene->vy+=4096;
ene->pt = obj_obj+PT_ST+(ene->anim_count++)/8;
if( ene->pt > obj_obj+PT_END ){
ene->pt = obj_obj+PT_ST;
ene->anim_count=0;
}
#if 0
if(ENE_X < 128){
ene->lx = 64*65536;
ene->ly = 192*65536;
ene->vx = 0;
ene->vy = 0;
}
if( BITSNS(0x04) & BIT(1) ){
while( BITSNS(0x04) & BIT(1) );
entry_counter_stop = 0;
return (0);
}
#endif
/* 画面外に出たら消去 */
if( ENE_X < 0 - 32 || ENE_X > 255 + 32 || ENE_Y > 255 + 32
|| CheckBGHit(ENE_X-16,ENE_Y-16)!=NON_BG )
return (0);
/* ダメージを受けた時の処理 */
#if 1
if(ene->damage){
if((ene->hp -= ene->damage) <= 0) {
MakeEffect(EFFECT_EXPLMINI, 0, ene->x, ene->y);
ene->player->score += 1;
return (0); /* 消去 */
}
ene->damage = 0;
}
#endif
xsp_set_st(ene);
return(1);
}
/*
static void TiniEnemyRock(ENEMY * p)
{
}
*/